package org.ccay.core.ioc;

/**
 * 自注入接口
 * <br/>由于Spring AOP的一些限制，在类中使用 this.methodA() 方式调用本类方法的，
 * methodA上执行的各种拦截都将无效，包括@CcayOperation，@Audit，@Cacheable等，
 * 需要改为通过对象的方式来调用。
 * <br/>
 * 步骤一：添加自身接口类型的field，名为self，并让需要进行自调用的类实现 ISelfInject 接口，接口的实现中将参数中的self转型并赋值给this.self
 * <br/>
 * 
 * <pre>
 * <code>
 * &#064;Named
 * &#064;CcayResource(code = "Lookup.Item", desc = "Lookup Item Management")
 * public class LookupItemService implements ILookupItemService,ISelfInject {
 * 	&#064;Inject
 * 	protected ILookupItemDao iLookupItemDao;
 * 	//注意，此处不再标注Inject 
 * 	private ILookupItemService self ;
 * 	 
 * 	public void setSelf(Object self) {
 * 		this.self = (ILookupItemService)self;
 * }
 * }
 * </code>
 * </pre>
 * <br/>步骤二：修改原先通过this进行调用的代码（注意，this有时是省略了的），改为通过self 调用，如下：
 * 	 
 * <pre>
 * <code>
 * 	public void batchOperation(List<LookupItemVO> creatItem,
 * 			List<LookupItemVO> updateItem, List<LookupItemVO> deleteItem)
 * 			throws ApplicationException {
 * 		// 如果对象不为空 执行
 * 		if (!creatItem.isEmpty()) {
 * 			self.createItemList(creatItem);
 * 		}
 * 		if (!updateItem.isEmpty()) {
 * 			self.updateItemList(updateItem);
 * 		}
 * 		if (!deleteItem.isEmpty()) {
 * 			self.deleteItemList(deleteItem);
 * 		}
 * 	}
 * </code>
 * </pre> 
 * 
 * @since 2012-1-19
 */
public interface ISelfInject {
	/**
	 * 注入自己	
	 * 
	 * @since 2012-1-19
	 * @param self
	 */
	void setSelf(Object self);
}
